Instance Method Reference হল Java Functional Programming এর একটি ফিচার, যা method references এর মাধ্যমে অবজেক্টের ইনস্ট্যান্স মেথডকে functional interface এর সাথে সংযুক্ত করার একটি সহজ উপায় প্রদান করে। এটি Java 8 এ Lambda Expressions এর একটি বিকল্প হিসেবে এসেছে এবং একটি method reference সোজা একটি মেথডের রেফারেন্স তৈরি করে যা পরবর্তী সময়ে functional interface এর মধ্যে ব্যবহার করা যায়।
Instance Method Reference বিশেষভাবে কার্যকরী যখন আমরা একটি অবজেক্টের মেথডকে Lambda Expression এর মাধ্যমে কল করার পরিবর্তে সরাসরি মেথড রেফারেন্স ব্যবহার করতে চাই।
1. Instance Method Reference এর Syntax:
Instance Method Reference এর সাধারণ সিনট্যাক্স হল:
objectReference::instanceMethodName
- objectReference: এটি একটি অবজেক্ট রেফারেন্স যা মেথডের ইনস্ট্যান্স কল করতে ব্যবহৃত হয়।
- instanceMethodName: এটি সেই মেথডের নাম যা আপনি রেফারেন্স করতে চান।
এটি মূলত একটি functional interface (যেমন, Consumer, Function, Predicate ইত্যাদির) সাথে ব্যবহার করা হয়।
2. Instance Method Reference এর উদাহরণ:
ধরা যাক, আমাদের একটি List রয়েছে এবং আমরা একটি ইনস্ট্যান্স মেথডের মাধ্যমে প্রতিটি এলিমেন্টের উপর কিছু কার্যক্রম প্রয়োগ করতে চাই।
উদাহরণ 1: Using Instance Method Reference
import java.util.Arrays;
import java.util.List;
public class InstanceMethodReferenceExample {
// Instance method to be referenced
public void print(String str) {
System.out.println(str);
}
public static void main(String[] args) {
InstanceMethodReferenceExample example = new InstanceMethodReferenceExample();
// List of strings
List<String> words = Arrays.asList("Hello", "World", "Java", "Functional", "Programming");
// Using Lambda Expression
words.forEach(word -> example.print(word));
// Using Instance Method Reference
words.forEach(example::print); // Instance Method Reference
}
}
ব্যাখ্যা:
- এখানে
printএকটি instance method যা একটি স্ট্রিং আর্গুমেন্ট নেয় এবং সেটি কনসোলে প্রিন্ট করে। - প্রথমে, Lambda Expression ব্যবহার করে
example.print(word)কল করা হয়। - তারপর, Instance Method Reference ব্যবহার করা হয়
example::printহিসেবে। এটি সোজাprintমেথডের রেফারেন্স কল করে এবং লিস্টের প্রতিটি শব্দ প্রিন্ট করতে সাহায্য করে।
আউটপুট:
Hello
World
Java
Functional
Programming
3. Instance Method Reference এবং Lambda Expression এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Lambda Expression | Instance Method Reference |
|---|---|---|
| সিনট্যাক্স | (parameter) -> object.method(parameter) | object::method |
| কোডের পরিমাণ | কিছুটা দীর্ঘ এবং বেশি কোড লেখা হয় | সংক্ষিপ্ত এবং পরিষ্কার |
| ব্যবহারযোগ্যতা | ল্যাম্বডা এক্সপ্রেশন অনেক বেশি নমনীয় | কেবল ইনস্ট্যান্স মেথড রেফারেন্সের জন্য |
| পারফরম্যান্স | কিছুটা কম পারফরম্যান্স হতে পারে | বেশি পারফরম্যান্স, কারণ রেফারেন্স কল সরাসরি হয় |
4. প্রকারভেদ:
Method references কে মূলত তিন ধরনের হিসাবে ভাগ করা হয়:
- Static Method Reference: একটি স্ট্যাটিক মেথডের রেফারেন্স তৈরি করা হয়।
- Instance Method Reference (Current Class): বর্তমান ক্লাসের ইনস্ট্যান্স মেথডের রেফারেন্স।
- Instance Method Reference (Arbitrary Object): যেকোনো ক্লাসের ইনস্ট্যান্স মেথডের রেফারেন্স।
- Constructor Reference: কনস্ট্রাকটরের রেফারেন্স তৈরি করা হয়।
এখানে আমরা Instance Method Reference (Current Class) এর উদাহরণ দেখেছি, যেখানে বর্তমান ক্লাসের ইনস্ট্যান্স মেথড ব্যবহার করা হয়েছে।
5. Additional Example: Instance Method Reference with a Different Class
ধরা যাক, আমাদের দুটি ক্লাস আছে, একটি ক্লাসের মেথড অন্য ক্লাসের মাধ্যমে কল করা হচ্ছে।
import java.util.Arrays;
import java.util.List;
class Printer {
// Instance method to print a string
public void print(String str) {
System.out.println(str);
}
}
public class InstanceMethodReferenceWithDifferentClass {
public static void main(String[] args) {
Printer printer = new Printer();
List<String> items = Arrays.asList("Apple", "Banana", "Cherry");
// Using Instance Method Reference with a different class
items.forEach(printer::print); // Using Instance Method Reference
}
}
ব্যাখ্যা:
- এখানে,
Printerক্লাসের একটি ইনস্ট্যান্স মেথডprintযা একটি স্ট্রিং আর্গুমেন্ট প্রিন্ট করে। - আমরা
items.forEach(printer::print)এর মাধ্যমেPrinterক্লাসেরprintমেথড রেফারেন্স করেছি, যা আমাদের লিস্টের প্রতিটি আইটেম প্রিন্ট করবে।
6. Benefits of Using Instance Method Reference:
- Code Simplicity: Lambda expressions এর পরিবর্তে method references ব্যবহার কোডকে আরও সোজা, পরিষ্কার এবং সহজ করে তোলে।
- Readability: কোডের সাইজ কমে যায় এবং readability অনেক বেড়ে যায়।
- Reusability: একাধিক জায়গায় একই মেথড রেফারেন্স করে আপনি কোড পুনঃব্যবহার করতে পারেন।
7. When to Use Instance Method Reference:
- যখন আপনি Lambda Expression ব্যবহার করছেন এবং সেটি একটি মেথড কলের মধ্যে সহজেই রূপান্তরিত হতে পারে, তখন Instance Method Reference ব্যবহার করা সবচেয়ে ভাল।
- এটি আপনাকে কম কোডে কার্যকরীভাবে একই কাজ করতে সাহায্য করে।
সারাংশ:
Instance Method Reference Java 8 এর একটি অত্যন্ত শক্তিশালী বৈশিষ্ট্য যা functional interfaces এর মাধ্যমে মেথড রেফারেন্স ব্যবহার করার সুবিধা প্রদান করে। এটি Lambda Expressions এর একটি সংক্ষিপ্ত এবং পরিষ্কার বিকল্প হিসেবে কাজ করে, এবং কোডের পাঠযোগ্যতা এবং maintainability বৃদ্ধি করতে সহায়তা করে। Method References ইফেক্টিভ কোড লেখার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল, বিশেষত যখন আপনাকে একটি নির্দিষ্ট মেথড বার বার ব্যবহার করতে হয়।